home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
A Teacher's Guide to the Holocaust
/
A Teacher's Guide to the Holocaust.iso
/
data
/
timeline
/
scripts
/
elemtimrclass.js
< prev
next >
Wrap
Text File
|
2000-06-26
|
8KB
|
282 lines
// Copyright 1998,1999 Macromedia, Inc. All rights reserved.
//Constructs a timer element
function MM_timr(theParent, theName, theInitialValue,
theNumberOfFrames, theTimeLimit,
theReverseFrames) {
// properties
this.initialValue = theInitialValue;
this.value = '';
this.disabled = true;
this.timeLeft = '';
this.timeLimit = theTimeLimit;
this.timeStart = '';
this._parent = theParent;
this._name = theName;
this._self = theParent._self+".e['"+theName+"']";
this._obj = '';
this._fileExt = '';
this._filePre = '';
this._preloadFrame = 1;
this._preloadInterval = 1;
this._preloadObj = new Image();
this._tick = (theTimeLimit/theNumberOfFrames)/3;
this._numberOfFrames = theNumberOfFrames;
this._currentFrame = 0;
this._reverseFrames = theReverseFrames;
this._timeoutWaiting = false;
this.c = new Array();
// member functions
this.init = MM_timrInit;
this.reset = MM_timrReset;
this.enable = MM_timrEnable;
this.disable = MM_timrDisable;
this.setDisabled = MM_timrSetDisabled;
this.update = MM_timrUpdate;
this.setValue = MM_timrSetValue;
this.step = MM_timrStep;
this.getClosestFrame = MM_timrGetClosestFrame;
this.waitTick = MM_timrWaitTick;
this.preloadFrame = MM_timrPreloadFrame;
this.getFrameSrc = MM_timrGetFrameSrc;
}
// Initializes the element
function MM_timrInit() {
var theSrc, extIndex, undIndex;
with (this) {
_obj = MM_intFindObject(_parent._self + _name + "Img");
if (_obj && _obj.src != null) {
theSrc = _obj.src;
extIndex = theSrc.lastIndexOf(".");
if (extIndex != -1) { // save the extension
_fileExt = theSrc.substring(extIndex, theSrc.length);
theSrc = theSrc.substring(0, extIndex); // remove extension
}
undIndex = theSrc.lastIndexOf("_");
if (undIndex != -1)
_filePre = theSrc.substring(0, undIndex+1);
preloadFrame();
}
if (_tick > 100) _tick = 100;
}
}
//Resets the element
function MM_timrReset() {
var i;
with (this) {
value = initialValue;
timeLeft = Math.max(0, timeLimit - value);
for(i in c) if (i != 'length' && c[i].expectedValue >= value)
c[i].selected = c[i].judged = false;
if (_obj) {
_currentFrame = getClosestFrame(value);
_obj.src = getFrameSrc(_currentFrame);
preloadFrame();
}
timeStart = Math.floor((new Date()).getTime()/1000) - value;
_parent.disabled ? disable() : enable();
}
}
//Enables the element
function MM_timrEnable() {
var i;
with (this) {
if (disabled) {
disabled = false;
timeStart = Math.floor((new Date()).getTime()/1000) - value;
}
for (i in c) if (i != 'length') c[i].disabled = false;
update();
waitTick();
}
}
//Disables the element
function MM_timrDisable() {
with (this) {
if (!disabled) {
disabled = true;
value = Math.floor((new Date()).getTime()/1000) - timeStart;
timeLeft = timeLimit - value;
} }
}
//Calls the approppriate disable or enable function
function MM_timrSetDisabled(theDisabled) {
if (theDisabled) this.disable();
else this.enable();
}
//Called by onClick event to update this elements value
function MM_timrUpdate() {
var i,judgeInt=false;
with (this) {
if (disabled) return;
// walk the list of choices, setting selected
for (i in c) if (i != 'length') {
if (!c[i].judged && c[i].validValue()) {
judgeInt = true;
c[i].judged = true;
} }
// call the parent's update
_parent.update(!judgeInt);
}
}
function MM_timrSetValue(theValue) {
with (this) {
value = Math.max(0, theValue);
timeStart = Math.floor((new Date()).getTime()/1000) - value;
timeLeft = Math.max(0, timeLimit - value);
for(i in c) if (i != 'length' && c[i].expectedValue >= value)
c[i].selected = c[i].judged = false;
if (_obj) {
_currentFrame = getClosestFrame(value);
_obj.src = getFrameSrc(_currentFrame);
preloadFrame();
}
_parent.update(true); // update int, no judge
}
}
//Calls the setTimeout() function for this element.
function MM_timrWaitTick() {
with (this) {
if (!_timeoutWaiting) {
_timeoutWaiting = true;
setTimeout(_self + ".step()", _tick);
} }
}
//Returns the "best guess" of the frame to show for the current time.
// theTime - the time to find the frame for in seconds
function MM_timrGetClosestFrame(theTime) {
var frame;
with (this) {
frame = Math.floor((theTime * (_numberOfFrames - 1)) / timeLimit);
if (theTime >= timeLimit)
frame = _numberOfFrames - 1;
else if (frame > (_numberOfFrames - 2))
frame = _numberOfFrames - 2;
}
return frame;
}
//Returns the URL for the given frame image.
// theFrame - the frame to get the source file name for
function MM_timrGetFrameSrc(theFrame) {
var iTest, numberStr;
with (this) {
numberStr = (_reverseFrames) ? (_numberOfFrames - theFrame) : (theFrame + 1);
// add pad zeros
for (iTest=10; (this._numberOfFrames >= iTest); iTest*=10)
if (numberStr < iTest) numberStr = "0" + numberStr;
}
return this._filePre + numberStr + this._fileExt;
}
//Preload the "best guess" next frame that we can use.
function MM_timrPreloadFrame() {
with (this) {
_preloadFrame = _currentFrame + _preloadInterval;
if (_preloadFrame >= _numberOfFrames)
_preloadFrame = _numberOfFrames - 1;
_preloadObj.src = getFrameSrc(_preloadFrame);
}
}
//Catches the timeout event and updates the timer display
// and element values. Args:
function MM_timrStep() {
var doPreload, closestFrame;
with (this) {
_timeoutWaiting = false;
if (!disabled) {
value = Math.floor((new Date()).getTime()/1000) - timeStart;
timeLeft = timeLimit - value;
if (_obj) {
doPreload=false;
closestFrame=getClosestFrame(value);
if (_preloadObj.complete) {
if (closestFrame >= _preloadFrame) {
_obj.src = _preloadObj.src;
doPreload = true;
}
} else if (closestFrame > _preloadFrame) {
_preloadInterval++;
doPreload = true;
}
if (doPreload) {
_currentFrame = closestFrame;
preloadFrame();
} }
if (this.onTick != null) onTick(_parent._self+_name, value);
waitTick();
update();
} }
}
/////////////////////////////////////////
//Create a range choice object
function MM_timrTrig(theParent, theElement, theName,
theExpectedValue, theIsCorrect, theScore) {
// properties
this.expectedValue = theExpectedValue;
this.isCorrect = theIsCorrect;
this.score = theScore;
this.selected = false;
this.disabled = false;
this.judged = false;
this._elem = eval(theParent._self+".e['"+theElement+"']");
this._isChoice = true;
// method
this.validValue = MM_timrTrigValidValue;
this.setDisabled = MM_timrTrigSetDisabled;
this.setSelected = MM_timrTrigSetSelected;
}
//Returns true if value is above this threshold.
function MM_timrTrigValidValue() {
with (this) {
selected = false;
if (!disabled && _elem.value != null)
selected = (expectedValue <= _elem.value);
}
return this.selected;
}
function MM_timrTrigSetDisabled(theDisabled) {
with (this) {
disabled = theDisabled;
validValue();
_elem._parent.update(true); // update int, no judge
}
}
function MM_timrTrigSetSelected(theSelected) {
with (this) {
if (theSelected) {
_elem.setValue(expectedValue);
} else {
this.selected = false;
_elem._parent.update(true); // update int, no judge
} }
}